package cacy.leetcode.array;


/**
 * @author 凯齐
 * @date 2025-02-19 20:53
 * @description
 * 为了深入了解这些生物群体的生态特征，你们进行了大量的实地观察和数据采集。
 * 数组 arrayA 记录了各个生物群体数量数据，其中 arrayA[i] 表示第 i 个生物群体的数量。
 * 请返回一个数组 arrayB，该数组为基于数组 arrayA 中的数据计算得出的结果，
 * 其中 arrayB[i] 表示将第 i 个生物群体的数量从总体中排除后的其他数量的乘积。
 *
 * 示例 1：
 * 输入：arrayA = [2, 4, 6, 8, 10]
 * 输出：[1920, 960, 640, 480, 384]
 *
 * 示例 2：
 * 输入：arrayA = [1, 2, 0, 4, 5]
 * 输出：[0, 0, 40, 0, 0]
 *
 * 示例 3:
 * 输入：arrayA = [1, 2, 0, 4, 0]
 * 输出：[0, 0, 0, 0, 0]
 *
 * 提示：
 *     所有元素乘积之和不会溢出 32 位整数
 *     arrayA.length <= 100000
 *
 */

class SolutionArray03 {
    public int[] statisticalResult(int[] arrayA) {
        int multiple = 1;
        int zeroCount = 0;
        int[] arrayB = new int[arrayA.length];
        // 计算总乘积，同时统计0的个数
        for (int i = 0; i < arrayA.length; i++) {
            if (arrayA[i] == 1) {// 跳过元素1
                continue;
            }
            if (arrayA[i] == 0) {// 发现一个0，零计数器zeroCount自增，
                zeroCount++;
                continue;
            }
            // 普通情况就给总乘积累乘
            multiple *= arrayA[i];
        }
        if (zeroCount > 1) {// 如果零计数器大于1，总乘积直接置0
            multiple = 0;
        }

        for (int i = 0; i < arrayB.length; i++) {
            // 总乘积为0，说明多余1个0
            if (multiple == 0) {
                break;
            }
            // 零计数器为1,除为0位置为multiple，其余都为0
            if (zeroCount == 1) {
                if (arrayA[i] == 0) {
                    arrayB[i] = multiple;
                }else {
                    arrayB[i] = 0;
                }
            } else {
                // 正常情况，做除法
                arrayB[i] = multiple / arrayA[i];
            }
        }
        return arrayB;
    }
}


public class Array03 {
}
